package com.dy.course.common;


import java.io.Serializable;
import java.util.Set;

/**
 * 
 * 缓存管理接口卡
 * @author wodvpn
 *
 */
public interface CacheManager {
	/**
	 * 根据key获取value
	 * @param key
	 * @return
	 */
	public Object get(final String key);

	/**
	 * 模糊查询
	 * @param pattern
	 * @return
	 */
	public Set<Object> getAll(final String pattern);

	/**
	 * 缓存key,value和失效时间
	 * @param key
	 * @param value
	 * @param seconds
	 */
	public void set(final String key, final Serializable value, int seconds);

	/**
	 * 设置key,value
	 * @param key
	 * @param value
	 */
	public void set(final String key, final Serializable value);

	/**
	 * 是否存在key
	 * @param key
	 * @return
	 */
	public Boolean exists(final String key);

	/**
	 * 删除Key
	 * @param key
	 */
	public void del(final String key);

	/**
	 * 批量删除
	 * @param pattern
	 */
	public void delAll(final String pattern);

	/**
	 * 查询类型
	 * @param key
	 * @return
	 */
	public String type(final String key);

	/**
	 * 设置失效时间
	 * @param key
	 * @param seconds
	 * @return
	 */
	public Boolean expire(final String key, final int seconds);

	/**
	 * 在某个时间点失效
	 * @param key
	 * @param unixTime
	 * @return
	 */
	public Boolean expireAt(final String key, final long unixTime);

	/**
	 * @param key
	 * @return
	 */
	public Long ttl(final String key);

	/**
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	public Object getSet(final String key, final Serializable value);
	
	/**
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean setnx(final String key, final Serializable value);

	/**
	 * @param key
	 */
	public void unlock(String key);

	/**
	 * @param key
	 * @param field
	 * @param value
	 */
	public void hset(String key, String field, String value);

	/**
	 * @param key
	 * @param field
	 * @return
	 */
	public Object hget(String key, String field);

	/**
	 * @param key
	 * @param field
	 */
	public void hdel(String key, String field);
}
